Check the size of the g_new arguments
We're passing integers without validating their size, and newer GCC are
very cross about it, with warnings like:
warning: argument 1 range [
18446744071562067968,
18446744073709551615]
exceeds maximum object size
9223372036854775807 [-Walloc-size-larger-than=]
We should check we're not overflowing the allocation size, by limiting
the range of values we can use.
First of all, we need to use `gsize` instead of a random `int`, since we're
allocating data.
Additionally, we need to check that the multiplication that computes the
size of the allocation doesn't overflow the maximum value of a `gsize`.